排序算法
名词解释:
- n: 数据规模
- k: “桶”的个数
- In-place: 占用常数内存,不占用额外内存
- Out-place: 占用额外内存
快排的Partition函数与归并的Merge函数
// 快速排序
void QuickSort(T a[], int low, int high) {
if (low < high) {
/************ Partition 函数**************/
pivot = a[low];
i = low; j = high;
while (i < j) {
while (i < j && a[j] >= pivot) {
j--;
}
a[i] = a[j];
while (i < j && a[i] <= pivot) {
i++;
}
a[j] = a[i];
}
a[i] = pivot;
/*****************************************/
// 对子序列快排
QuickSort(a, low, i-1);
QuickSort(a, i+1, high);
}
}
// 归并排序
void MergeSort ( T a[], int low, int high ) {
if ( low >= high ) {
return;
} else {
mid = (low + high) / 2;
MergeSort(a, low, mid);
MergeSort(a, mid+1, high);
Merge(a, low, mid, high);
}
}
/****************** Merge 函数*********************/
void Merge(T a[], int low, int mid, int high) {
// 归并到 b[]
i = low;
k = low;
while(i <= mid && j <= high ) {
if(a[i] <= a[j]) {
b[k] = a[i]; i++;
} else {
b[k] = a[j]; j++;
}
k++;
}
// 归并剩余元素
while(i <= mid) {
b[k++] = a[i++];
}
while(j <= high) {
b[k++] = a[j++];
}
// 从 b[]复制回 a[]
a[low..high] = b[low..high];
}
/*************************************************/
排序详解可参考博文 https://www.cnblogs.com/onepixel/articles/7674659.html
二分查找
int